<?php

/**
 * @Author: ddyake
 * @Date:   2020-08-29 18:50:12
 * @Last Modified by:   ddyake
 * @Last Modified time: 2020-12-25 00:04:30
 * 公共统一方法 --- 数据库查询
 */
class Unity{
  //网站配置表
  private $website;




  function __construct(&$website) {
    $this->website = $website;
  } //__construct


 
 

  // 根据UID获取用户详细信息
  public function user($id){
    return $this->website['class']['db']
            ->table('user')
            ->where('id=?',$id)
            ->one();
  }
  // 根据用户名返回用户信息
  public function userForUname($usr){
    return $this->website['class']['db']
            ->table('user')
            ->where('uname=?',$usr)
            ->one();
  }
  // 根据用户名查询用户是否存在
  public function userCount($usr){
    return $this->website['class']['db']
            ->table('user')
            ->where('uname=?',$usr)
            ->limit(1)
            ->count();
  }

    // 更新一条数据  返回变更条数
  public function userUpdate($arr){
    if(!($arr['id']??false) || !$arr['id']){return 0;}
    $id = $arr['id'];
    unset($arr['id']);

    return $this->website['class']['db']
            ->table('user')
            ->field(array_keys($arr))
            ->value(array_values($arr))
            ->where('id=?',$id)
            ->update();
  }


// ----------------链接相关数据库操作
// 
  // 查询一条数据 
  // $condition sting($where="xxx=?")/array(where="xxx=? and xx=?")
  public function linksOne($where,$condition){
    return $this->website['class']['db']
            ->table('links')
            ->where($where,$condition)
            ->one();
  }
  // 查询链接是否存在 返回0/1
  public function linksCount($where,$condition){
    return $this->website['class']['db']
            ->table('links')
            ->where($where,$condition)
            ->limit(1)
            ->count();
  }
  // 创建一条数据  返回链接id
  public function linksInsert($arr){
    return $this->website['class']['db']
            ->table('links')
            ->field(array_keys($arr))
            ->value(array_values($arr))
            ->insert();
  }
  // 更新一条数据  返回变更条数
  public function linksUpdate($arr){
    if(!($arr['id']??false) || !$arr['id']){return 0;}
    $id = $arr['id'];
    $uid= $arr['uid'];
    unset($arr['id']);
    unset($arr['uid']);

    return $this->website['class']['db']
            ->table('links')
            ->field(array_keys($arr))
            ->value(array_values($arr))
            ->where('id=? and uid=?',$id,$uid)
            ->update();
  }
  // 删除有一条链接 返回是否正确
  public function linksDelete($where,$condition,$only=1){
    $this->website['class']['db']
            ->table('links')
            ->where($where,$condition);
    if($only){
      $this->website['class']['db']->limit(1);
    }
    return $this->website['class']['db']->delete();
  }


// --------配置相关数据库操作

  // 获取一条配置内容
  public function configura($key){
    $json=[];
    try{
      $str =  $this->website['class']['db']
                ->table('configura')
                ->field('v')
                ->where('k=?',$key)
                ->one();
      $json= json_decode($str['v'],1);
    }catch(PDOException $e){
      $json=[];
    }
    
    return $json;
  }

 

 


// --------------------日志相关数据库操作
    /**
   * @Author      ddyake
   * @DateTime    2020-09-26
   * @copyright   [ddyake]
   * @description [保存日志]
   * @param       [...]     $args [不定多参]
   * @return      [bool]          [description]
   */
  public function log(...$args){

    $args = func_get_args();
    $txt = implode('',$args);

    $this->website['class']['db']
          ->table('log')
          ->field('createtime','txt')
          ->value($_SERVER['REQUEST_TIME'],$txt)
          ->insert();
          $this->website['class']['log']
          ->message($txt);
    return true;
  }

  // 保存相关使用过的SQL语句
  public function logSql(...$args){
    $args = func_get_args();
    $txt = implode('',$args);
    return $this->log($txt,'执行的SQL语句:',json_encode($this->website['class']['db']->sql));
  }

 
  // ---支付宝全局参数
  function zfbgGetOptions(){
    $sys = $this->configura('sys');

    $options = new Config();
    $options->protocol = 'https';
    $options->gatewayHost = 'openapi.alipay.com';
    $options->signType = 'RSA2';
    
    $options->appId = $sys['payAppidZfb'];//'<-- 请填写您的AppId，例如：2019022663440152 -->';
    
    //'<-- 请填写您的应用私钥，例如：MIIEvQIBADANB ... ... -->';
    // 为避免私钥随源码泄露，推荐从文件中读取私钥字符串而不是写入源码中
    $privateKey = file_get_contents($this->website['path']['conf'].'/crt/ali/private.crt');
    $options->merchantPrivateKey = $privateKey;

    // '<-- 请填写您的支付宝公钥证书文件路径，例如：/foo/alipayCertPublicKey_RSA2.crt -->'
    $options->alipayCertPath = $this->website['path']['conf'].'/crt/ali/alipayCertPublicKey_RSA2.crt';

    // '<-- 请填写您的支付宝根证书文件路径，例如：/foo/alipayRootCert.crt" -->';
    $options->alipayRootCertPath = $this->website['path']['conf'].'/crt/ali/alipayRootCert.crt';

    // '<-- 请填写您的应用公钥证书文件路径，例如：/foo/appCertPublicKey_2019051064521003.crt -->'
    $options->merchantCertPath = $this->website['path']['conf'].'appCertPublicKey_2021002110674622.crt';
    
    //注：如果采用非证书模式，则无需赋值上面的三个证书路径，改为赋值如下的支付宝公钥字符串即可
    // $options->alipayPublicKey = '<-- 请填写您的支付宝公钥，例如：MIIBIjANBg... -->';

    //可设置异步通知接收服务地址（可选）
    //"<-- 请填写您的支付类接口异步通知接收服务地址，例如：https://www.test.com/callback -->"
    $options->notifyUrl = $sys['payZfbNotifyUrl'];
    
    //可设置AES密钥，调用AES加解密相关接口时需要（可选）
    // $options->encryptKey = "<-- 请填写您的AES密钥，例如：aa4BtZ4tspm2wnXLb1ThQA== -->";

    return $options;
  }


}